#ifndef _HEUR_H
#define _HEUR_H



#include "../lib/common.h"
#include "../lib/compare.h"
#include <time.h>


#define DEBUG 0                 /**< modo debug */



/** Calcula o custo de uma permutacao
 * @param jobs Vetor contendo os jobs
 * @param nJobs Total de jobs
 * @return Custo calculado
 */
int calcCost(const Job *jobs, const int nJobs);


/** Funcao que resolve o tempo minimo de execucao
 * @param jobs Vetor contendo os jobs
 * @param nJobs Total de jobs
 */
void johnson(Job *jobs, const int nJobs);


/** Funcao que acha o minimo local
 * @param jobs Vetor contendo os jobs
 * @param nJobs Total de jobs
 */
void hillClimbing(Job *jobs, const int nJobs);


/** Funcao que gera uma permutacao aleatoria de jobs 
 * @param jobs Vetor contendo os jobs
 * @param nJobs Total de jobs
 */
void shuffleJobs(Job *jobs, const int nJobs);


/** Funcao que aplica a heuristica GRASP 
 * @param jobs Vetor contendo os jobs
 * @param nJobs Total de jobs
 * @param maxExecTime Tempo maximo de execucao (em segundos)
 */
void grasp(Job *jobs, const int nJobs, const int maxExecTime);


/** Funcao principal
 * @param argc Total de argumentos
 * @param argv Vetor de string dos argumentos
 *
 * @return
 *      - EXIT_SUCCESS: saida com sucesso
 *      - EXIT_FAILURE: saida com erro
 */
int main(int argc, char *argv[]);


#endif

